home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue38 / Clinic / StpKey3U.pas < prev    next >
Pascal/Delphi Source File  |  1998-07-07  |  3KB  |  103 lines

  1. unit StpKey3U;
  2.  
  3. interface
  4.  
  5. uses
  6.   WinProcs, WinTypes, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, Menus;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Label1: TLabel;
  12.     Label2: TLabel;
  13.     Label3: TLabel;
  14.     Edit1: TEdit;
  15.     Edit2: TEdit;
  16.     Edit3: TEdit;
  17.     Edit4: TEdit;
  18.     Edit5: TEdit;
  19.     Edit6: TEdit;
  20.     Edit7: TEdit;
  21.     Edit8: TEdit;
  22.     Label4: TLabel;
  23.     procedure FormKeyDown(Sender: TObject; var Key: Word;
  24.       Shift: TShiftState);
  25.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  26.   private
  27.     { Private declarations }
  28.   public
  29.     procedure WMMenuChar(var Msg: TWMMenuChar); message wm_MenuChar;
  30.   end;
  31.  
  32. var
  33.   Form1: TForm1;
  34.  
  35. implementation
  36.  
  37. {$R *.DFM}
  38.  
  39. function GetShiftState: TShiftState;
  40. var
  41.   KeyState: TKeyboardState;
  42. begin
  43.   Result := [];
  44.   GetKeyboardState(KeyState);
  45.   if KeyState[vk_Shift]   and $80 <> 0 then Include(Result, ssShift);
  46.   if KeyState[vk_Control] and $80 <> 0 then Include(Result, ssCtrl);
  47.   if KeyState[vk_Menu]    and $80 <> 0 then Include(Result, ssAlt);
  48.   if KeyState[vk_LButton] and $80 <> 0 then Include(Result, ssLeft);
  49.   if KeyState[vk_RButton] and $80 <> 0 then Include(Result, ssRight);
  50.   if KeyState[vk_MButton] and $80 <> 0 then Include(Result, ssMiddle);
  51. end;
  52.  
  53. function GetCtrlLetter(Ch: Char): Char;
  54. begin
  55.   { Take away one less than the letter A }
  56.   Result := Chr(Ord(Ch) - Ord(Pred('A')))
  57. end;
  58.  
  59. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  60.   Shift: TShiftState);
  61. begin
  62.   if (Key  = vk_F2) and (Shift = []) then
  63.   begin
  64.     Caption := 'F2 was pressed at ' + TimeToStr(Time);
  65.     Key := 0
  66.   end;
  67. end;
  68.  
  69. procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
  70. var
  71.   Shift: TShiftState;
  72. begin
  73.   Shift := GetShiftState;
  74.   { Check Escape }
  75.   if (Key = Chr(vk_Escape)) and (Shift = []) then
  76.   begin
  77.     Color := RGB(Random(256), Random(256), Random(256));
  78.     Key := #0
  79.   end;
  80.   { When Ctrl+letter is pressed, the character code is the }
  81.   { position in the alphabet held by the uppercase letter }
  82.   if (Key = GetCtrlLetter('S')) and (Shift = [ssCtrl]) then
  83.   begin
  84.     Application.Minimize;
  85.     Key := #0
  86.   end;
  87. end;
  88.  
  89. procedure TForm1.WMMenuChar(var Msg: TWMMenuChar);
  90. begin
  91.   if UpCase(Msg.User) = 'S' then
  92.   begin
  93.     Caption := 'Alt+S was pressed at ' + TimeToStr(Time);
  94.     LongRec(Msg.Result).Hi := 1 { I've handled this }
  95.   end
  96.   else
  97.     inherited { I haven't handled this }
  98. end;
  99.  
  100. initialization
  101.   Randomize
  102. end.
  103.